package xin.mydreams.mybill.widget.user.entity;

import com.alibaba.fastjson.annotation.JSONField;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
import xin.mydreams.mybill.widget.home.entity.UserBaseEntity;
import xin.mydreams.mybill.widget.user.entity.enums.CheckRole;
import xin.mydreams.mybill.widget.user.entity.enums.Status;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;

/**
 * 用户表
 * 
 * @author Administrator
 *
 */
@Setter
@Getter
@ToString
@NoArgsConstructor
@Entity
@Table(name = "user")
public class User extends UserBaseEntity {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	/**
	 * 账号 --BINARY强制支持大小写
	 */
	@Id
	@Column(name = "`user_name`", columnDefinition = "VARCHAR(100) BINARY ")
	private String userName;

	/**
	 * 用户名
	 */
	@Column(name = "`display_name`")
	private String displayName;

	/**
	 * 用户密码,MD5加密
	 */
	//因为使用的是阿里巴巴的fastjson，所以用这个注解
	@JSONField(serialize = false)
	@Column(name = "`password`")
	private String password;

	/**
	 * 用户密码,MD5加密的salt
	 */
	@JSONField(serialize = false)
	@Column(name = "`salt`")
	private String salt;

	/**
	 * 邮件地址
	 */
	@Column(name = "`email`")
	private String email;

	/**
	 * 微信号
	 */
	@Column(name = "`wechat`")
	private String wechat;

	/**
	 * 手机号
	 */
	@Column(name = "`phone`")
	private String phone;
	/**
	 * 照片
	 */
	@Column(name = "`photo_url`")
	private String photoUrl;

	/**
	 * 最后登录时间
	 */
	@Column(name = "`last_login_time`")
	private String lastLoginTime;

	/**
	 * 有效期，永久为0
	 */
	@Column(name = "`expireat`")
	private String expireAt;

	/**
	 * 最后登录IP
	 */
	@Column(name = "`last_login_ip`")
	private String lastLoginIp;

	/**
	 * 账号状态 1为冻结 0为正常
	 */
	@Column(name = "`status`")
	private String status = Status.frozen.toString();

	/**
	 * status的set方法
	 * 
	 * @date Created at 2018年8月29日 下午4:39:05
	 * @Author 谷泽昊
	 * @param status
	 */
	public void setStatus(Status status) {
		this.status = status.toString();
	}

	/**
	 * 用户备注
	 */
	@Column(name = "`descriptions`")
	private String descriptions;

	/**
	 * 用户判断，管理员还是普通用户
	 */
	@Column(name = "`check_role`")
	private String checkRole;

	/**
	 * checkRole的set方法
	 * 
	 * @date Created at 2018年8月29日 下午4:39:12
	 * @Author 谷泽昊
	 * @param checkRole
	 */
	public void setCheckRole(CheckRole checkRole) {
		this.checkRole = checkRole.toString();
	}

	public boolean isEnabled() {
		return Status.normal.toString().equals(this.status);
	}

}
